{
  "nbformat": 4,
  "nbformat_minor": 0,
  "metadata": {
    "colab": {
      "name": "Part 4 - Fashion-MNIST.ipynb",
      "version": "0.3.2",
      "provenance": []
    },
    "kernelspec": {
      "display_name": "Python 3",
      "language": "python",
      "name": "python3"
    }
  },
  "cells": [
    {
      "metadata": {
        "id": "4ZumgjRLOcTL",
        "colab_type": "text"
      },
      "cell_type": "markdown",
      "source": [
        "# Classifying Fashion-MNIST\n",
        "\n",
        "Now it's your turn to build and train a neural network. You'll be using the [Fashion-MNIST dataset](https://github.com/zalandoresearch/fashion-mnist), a drop-in replacement for the MNIST dataset. MNIST is actually quite trivial with neural networks where you can easily achieve better than 97% accuracy. Fashion-MNIST is a set of 28x28 greyscale images of clothes. It's more complex than MNIST, so it's a better representation of the actual performance of your network, and a better representation of datasets you'll use in the real world.\n",
        "\n",
        "<img src='https://github.com/iArunava/Intro-to-Deep-Learning-with-Pytorch-Udacity-Solutions/blob/master/intro-to-pytorch/assets/fashion-mnist-sprite.png?raw=1' width=500px>\n",
        "\n",
        "In this notebook, you'll build your own neural network. For the most part, you could just copy and paste the code from Part 3, but you wouldn't be learning. It's important for you to write the code yourself and get it to work. Feel free to consult the previous notebooks though as you work through this.\n",
        "\n",
        "First off, let's load the dataset through torchvision."
      ]
    },
    {
      "metadata": {
        "id": "L63GUe5rOdly",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 332
        },
        "outputId": "4f1af61a-9520-45af-93ff-4484da4542c9"
      },
      "cell_type": "code",
      "source": [
        "!pip install torch torchvision"
      ],
      "execution_count": 1,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "Collecting torch\n",
            "\u001b[?25l  Downloading https://files.pythonhosted.org/packages/49/0e/e382bcf1a6ae8225f50b99cc26effa2d4cc6d66975ccf3fa9590efcbedce/torch-0.4.1-cp36-cp36m-manylinux1_x86_64.whl (519.5MB)\n",
            "\u001b[K    100% |████████████████████████████████| 519.5MB 25kB/s \n",
            "tcmalloc: large alloc 1073750016 bytes == 0x59950000 @  0x7f01ba5342a4 0x594e17 0x626104 0x51190a 0x4f5277 0x510c78 0x5119bd 0x4f5277 0x4f3338 0x510fb0 0x5119bd 0x4f5277 0x4f3338 0x510fb0 0x5119bd 0x4f5277 0x4f3338 0x510fb0 0x5119bd 0x4f6070 0x510c78 0x5119bd 0x4f5277 0x4f3338 0x510fb0 0x5119bd 0x4f6070 0x4f3338 0x510fb0 0x5119bd 0x4f6070\n",
            "\u001b[?25hCollecting torchvision\n",
            "\u001b[?25l  Downloading https://files.pythonhosted.org/packages/ca/0d/f00b2885711e08bd71242ebe7b96561e6f6d01fdb4b9dcf4d37e2e13c5e1/torchvision-0.2.1-py2.py3-none-any.whl (54kB)\n",
            "\u001b[K    100% |████████████████████████████████| 61kB 21.5MB/s \n",
            "\u001b[?25hCollecting pillow>=4.1.1 (from torchvision)\n",
            "\u001b[?25l  Downloading https://files.pythonhosted.org/packages/62/94/5430ebaa83f91cc7a9f687ff5238e26164a779cca2ef9903232268b0a318/Pillow-5.3.0-cp36-cp36m-manylinux1_x86_64.whl (2.0MB)\n",
            "\u001b[K    100% |████████████████████████████████| 2.0MB 4.4MB/s \n",
            "\u001b[?25hRequirement already satisfied: six in /usr/local/lib/python3.6/dist-packages (from torchvision) (1.11.0)\n",
            "Requirement already satisfied: numpy in /usr/local/lib/python3.6/dist-packages (from torchvision) (1.14.6)\n",
            "Installing collected packages: torch, pillow, torchvision\n",
            "  Found existing installation: Pillow 4.0.0\n",
            "    Uninstalling Pillow-4.0.0:\n",
            "      Successfully uninstalled Pillow-4.0.0\n",
            "Successfully installed pillow-5.3.0 torch-0.4.1 torchvision-0.2.1\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "metadata": {
        "id": "_gtYk-O4OkPE",
        "colab_type": "code",
        "colab": {}
      },
      "cell_type": "code",
      "source": [
        "# Helper functions\n",
        "def view_classify(img, ps, version=\"MNIST\"):\n",
        "    ''' Function for viewing an image and it's predicted classes.\n",
        "    '''\n",
        "    ps = ps.data.numpy().squeeze()\n",
        "\n",
        "    fig, (ax1, ax2) = plt.subplots(figsize=(6,9), ncols=2)\n",
        "    ax1.imshow(img.resize_(1, 28, 28).numpy().squeeze())\n",
        "    ax1.axis('off')\n",
        "    ax2.barh(np.arange(10), ps)\n",
        "    ax2.set_aspect(0.1)\n",
        "    ax2.set_yticks(np.arange(10))\n",
        "    if version == \"MNIST\":\n",
        "        ax2.set_yticklabels(np.arange(10))\n",
        "    elif version == \"Fashion\":\n",
        "        ax2.set_yticklabels(['T-shirt/top',\n",
        "                            'Trouser',\n",
        "                            'Pullover',\n",
        "                            'Dress',\n",
        "                            'Coat',\n",
        "                            'Sandal',\n",
        "                            'Shirt',\n",
        "                            'Sneaker',\n",
        "                            'Bag',\n",
        "                            'Ankle Boot'], size='small');\n",
        "    ax2.set_title('Class Probability')\n",
        "    ax2.set_xlim(0, 1.1)\n",
        "\n",
        "    plt.tight_layout()\n",
        "    \n",
        "\n",
        "def imshow(image, ax=None, title=None, normalize=True):\n",
        "    \"\"\"Imshow for Tensor.\"\"\"\n",
        "    if ax is None:\n",
        "        fig, ax = plt.subplots()\n",
        "    image = image.numpy().transpose((1, 2, 0))\n",
        "\n",
        "    if normalize:\n",
        "        mean = np.array([0.485, 0.456, 0.406])\n",
        "        std = np.array([0.229, 0.224, 0.225])\n",
        "        image = std * image + mean\n",
        "        image = np.clip(image, 0, 1)\n",
        "\n",
        "    ax.imshow(image)\n",
        "    ax.spines['top'].set_visible(False)\n",
        "    ax.spines['right'].set_visible(False)\n",
        "    ax.spines['left'].set_visible(False)\n",
        "    ax.spines['bottom'].set_visible(False)\n",
        "    ax.tick_params(axis='both', length=0)\n",
        "    ax.set_xticklabels('')\n",
        "    ax.set_yticklabels('')\n",
        "\n",
        "    return ax"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "metadata": {
        "id": "0emTeAkEOcTR",
        "colab_type": "code",
        "colab": {}
      },
      "cell_type": "code",
      "source": [
        "import torch\n",
        "import torch.nn as nn\n",
        "import torch.nn.functional as F\n",
        "from torchvision import datasets, transforms\n",
        "import matplotlib.pyplot as plt\n",
        "import numpy as np\n",
        "\n",
        "# Define a transform to normalize the data\n",
        "transform = transforms.Compose([transforms.ToTensor(),\n",
        "                                transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5))])\n",
        "# Download and load the training data\n",
        "trainset = datasets.FashionMNIST('~/.pytorch/F_MNIST_data/', download=True, train=True, transform=transform)\n",
        "trainloader = torch.utils.data.DataLoader(trainset, batch_size=64, shuffle=True)\n",
        "\n",
        "# Download and load the test data\n",
        "testset = datasets.FashionMNIST('~/.pytorch/F_MNIST_data/', download=True, train=False, transform=transform)\n",
        "testloader = torch.utils.data.DataLoader(testset, batch_size=64, shuffle=True)"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "metadata": {
        "id": "31FLAdeBOcTg",
        "colab_type": "text"
      },
      "cell_type": "markdown",
      "source": [
        "Here we can see one of the images."
      ]
    },
    {
      "metadata": {
        "id": "esGmQVyYOcTj",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 330
        },
        "outputId": "e0fa7818-7a5d-419c-b282-278810fc9df8"
      },
      "cell_type": "code",
      "source": [
        "image, label = next(iter(trainloader))\n",
        "imshow(image[0,:]);"
      ],
      "execution_count": 8,
      "outputs": [
        {
          "output_type": "display_data",
          "data": {
            "image/png": "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\n",
            "text/plain": [
              "<matplotlib.figure.Figure at 0x7fed5c352fd0>"
            ]
          },
          "metadata": {
            "tags": []
          }
        }
      ]
    },
    {
      "metadata": {
        "id": "5rIqLpxOOcTu",
        "colab_type": "text"
      },
      "cell_type": "markdown",
      "source": [
        "## Building the network\n",
        "\n",
        "Here you should define your network. As with MNIST, each image is 28x28 which is a total of 784 pixels, and there are 10 classes. You should include at least one hidden layer. We suggest you use ReLU activations for the layers and to return the logits or log-softmax from the forward pass. It's up to you how many layers you add and the size of those layers."
      ]
    },
    {
      "metadata": {
        "id": "7zTACgacOcTw",
        "colab_type": "code",
        "colab": {}
      },
      "cell_type": "code",
      "source": [
        "# TODO: Define your network architecture here\n",
        "\n",
        "# Hyperparameters\n",
        "inp = 784\n",
        "hid1 = 128\n",
        "hid2 = 64\n",
        "outl = 10\n",
        "epochs = 5\n",
        "lr = 0.003\n",
        "\n",
        "model = nn.Sequential(nn.Linear(inp, hid1),\n",
        "                      nn.ReLU(),\n",
        "                      nn.Linear(hid1, hid2),\n",
        "                      nn.ReLU(),\n",
        "                      nn.Linear(hid2, outl),\n",
        "                      nn.LogSoftmax(dim=1))"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "metadata": {
        "id": "VlbOHf0oOcT2",
        "colab_type": "text"
      },
      "cell_type": "markdown",
      "source": [
        "# Train the network\n",
        "\n",
        "Now you should create your network and train it. First you'll want to define [the criterion](http://pytorch.org/docs/master/nn.html#loss-functions) ( something like `nn.CrossEntropyLoss`) and [the optimizer](http://pytorch.org/docs/master/optim.html) (typically `optim.SGD` or `optim.Adam`).\n",
        "\n",
        "Then write the training code. Remember the training pass is a fairly straightforward process:\n",
        "\n",
        "* Make a forward pass through the network to get the logits \n",
        "* Use the logits to calculate the loss\n",
        "* Perform a backward pass through the network with `loss.backward()` to calculate the gradients\n",
        "* Take a step with the optimizer to update the weights\n",
        "\n",
        "By adjusting the hyperparameters (hidden units, learning rate, etc), you should be able to get the training loss below 0.4."
      ]
    },
    {
      "metadata": {
        "id": "A5aLBOoYOcT4",
        "colab_type": "code",
        "colab": {}
      },
      "cell_type": "code",
      "source": [
        "# TODO: Create the network, define the criterion and optimizer\n",
        "criterion = nn.NLLLoss()\n",
        "optimizer = torch.optim.SGD(model.parameters(), lr=lr)"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "metadata": {
        "id": "mmduMfqdOcT8",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 104
        },
        "outputId": "acc86254-3798-4137-edb7-878d0c57c136"
      },
      "cell_type": "code",
      "source": [
        "# TODO: Train the network here\n",
        "for epoch in range(epochs):\n",
        "    \n",
        "    running_loss = 0\n",
        "    \n",
        "    for images, labels in trainloader:\n",
        "        \n",
        "        images = images.view(images.shape[0], -1)\n",
        "        optimizer.zero_grad()\n",
        "        logits = model(images)\n",
        "\n",
        "        loss = criterion(logits, labels)\n",
        "        loss.backward()\n",
        "        optimizer.step()\n",
        "        \n",
        "        running_loss += loss.item()\n",
        "    else:\n",
        "        print ('Loss: ', running_loss / len(trainloader))"
      ],
      "execution_count": 49,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "Loss:  1.043138764623894\n",
            "Loss:  0.7151490997658101\n",
            "Loss:  0.6300638891232293\n",
            "Loss:  0.5836189146806945\n",
            "Loss:  0.5504198853077411\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "metadata": {
        "id": "hTQ6z9IiOcUE",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 279
        },
        "outputId": "81924539-728d-46e3-c7d1-ff6c1ffa8cfc"
      },
      "cell_type": "code",
      "source": [
        "%matplotlib inline\n",
        "%config InlineBackend.figure_format = 'retina'\n",
        "\n",
        "#import helper\n",
        "\n",
        "# Test out your network!\n",
        "\n",
        "dataiter = iter(testloader)\n",
        "images, labels = dataiter.next()\n",
        "img = images[0]\n",
        "# Convert 2D image to 1D vector\n",
        "img = img.resize_(1, 784)\n",
        "\n",
        "# TODO: Calculate the class probabilities (softmax) for img\n",
        "ps = torch.exp(model(img))\n",
        "print (ps)\n",
        "\n",
        "# Plot the image and probabilities\n",
        "#helper.view_classify(img.resize_(1, 28, 28), ps, version='Fashion')\n",
        "view_classify(img.resize_(1, 28, 28), ps, version='Fashion')"
      ],
      "execution_count": 52,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "tensor([[1.6984e-06, 3.6391e-06, 1.5387e-07, 8.0498e-07, 8.4174e-07, 1.0007e-02,\n",
            "         1.9404e-06, 2.2022e-02, 8.9345e-04, 9.6707e-01]],\n",
            "       grad_fn=<ExpBackward>)\n"
          ],
          "name": "stdout"
        },
        {
          "output_type": "display_data",
          "data": {
            "image/png": "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\nAABJRU5ErkJggg==\n",
            "text/plain": [
              "<matplotlib.figure.Figure at 0x7fed58755208>"
            ]
          },
          "metadata": {
            "tags": [],
            "image/png": {
              "width": 424,
              "height": 210
            }
          }
        }
      ]
    }
  ]
}